package com.authine.cloudpivot.engine.plugin.service;

import java.math.BigDecimal;
import java.util.*;

/**
 * @description:
 * @author: zyj
 * @time: 2021/6/17 17:45
 */
public interface TaskReportService {

    /**
     * @description: QC项目任务
     * @method: getXiaFaDataLejuan
     * @date: 2021/6/17 18:29
     * @author: zyj
     * @return: String
     */
    Boolean getXiaFaDataLejuan();

    /**
     * @description: 项目总集合
     * @method: getProjects
     * @date: 2021/6/22 18:10
     * @author: zyj
     * @param
     * @return: String
     */
    String getProjects();

    /**
     * @description: 项目移交
     * @method: moveSubject
     * @date: 2021/6/28 23:47
     * @author: zyj
     * @param oldUserId
     * @param newUserId
     * @param subjectCode
     * @return: java.lang.Boolean
     */
    Boolean moveSubject(String oldUserId, String newUserId, String subjectCode);

    /**
     * @description: qc自建任务的计算
     * @method: createZiJianQCReport
     * @date: 2021/7/1 11:44
     * @author: zyj
     * @param
     * @return: java.lang.Boolean
     */
    Boolean createZiJianQCReport();

    /**
     * @description: 更改样本数据
     * @method: updateSampleList
     * @date: 2021/7/1 18:26
     * @author: zyj
     * @return: java.lang.Boolean
     */
    Boolean updateSampleList();

    /**
     * @description: 更新招聘需求提报子表中门店状态
     * @method: updateStoreState
     * @date: 2021/7/5 15:07
     * @author: zyj
     * @param
     * @return: java.lang.Boolean
     */
    Boolean updateStoreState(String recruitmentId, String state);

    /**
     * @description: 删除当前时间之后的线下周报
     * @method: delOffLineReport
     * @date: 2021/7/5 15:07
     * @author: zyj
     * @param
     * @return: java.lang.Boolean
     */
    Boolean delOffLineReport(Date currentTime, String recuitmentId);

    /**
     * @description: 删除当前时间之后的线上周报
     * @method: delOnLineReport
     * @date: 2021/7/5 15:07
     * @author: zyj
     * @param
     * @return: java.lang.Boolean
     */
    Boolean delOnLineReport(Date currentTime, String recuitmentId);

    void updateDemandFor(String recruitmentType, String idCode, BigDecimal demandFor, String storeContacts, String contactsPhone, String comment);

    void updateRecruitmentState(String id, String state);

    Boolean hasRole(String userId, String roleId);

    void updateOnlineReportInfo(double onlineRecruitmentNum, double projectProvideNum, String comment,String id);

    void updateOffLineReport(double plannedNum, double finishedNum, double recommendNum, String councilor, String comment, String resubmisPerson, String id);

    void updateOffLineReportInfo(double mgFinishedNum, double clientProvideNum, double projectProvideNum, String id);

    List<String> getRecruitmentIds(List<String> idList, String recruitWay);

    void updateReportMgrInfo(String recuitmentId, String recruitWay, boolean isNeedExecute);

    ArrayList<Object[]> getReportCreateTimeList(String recruitmentId, String recruitWay);

    void delWeeklyReport(List<String> delIds, String recruitWay);

    void updateWeeklyReportInfo(String recruitmentId, Date needFinishTime, String recruitWay);

    void updateWeeklyReportMgrInfo(String recruitmentId, Date needFinishTime, String recruitWay, String recruitmentType);

    void autoReviewReportMgrInfo();

    void delReportInfoByICode(String recruitWay, List<String> idCodes, Date nextMonday);

    void updateRCSArea(String id, String schemaCode);

    void updateExecuteDetail(String executeDetailId, BigDecimal newStoreNum, BigDecimal newPlanGearsNum, BigDecimal newPlanRoundNum);

    void updateExecuteReportInfo(String executeDetailId, BigDecimal newStoreNum, BigDecimal newPlanGearsNum, BigDecimal newPlanRoundNum);

    void updateExecuteMgrInfo(String executeId, Date activityStartTime, Date activityEndTime);

    void updateExecuteReportTime(String executeId, Date oldWeekTime, Date newWeekTime);

    void delExecuteReport(List<String> executeIds);

    void updateExecuteReportEndTime(String executeDemandId, Date activityEndTime);

    void createExecuteDetail(Map<String, Object> data);

    List<String> getExecuteDemandIds(List<String> idList);

    void updateDetailState(String demandId, String year, String month, String cycle, String state);

    void updateExecuteCreateReportTime(String demandId, String year, String month, String cycle, Date reportCreateTime);

    void updateExecuteDemandEndTime(String demandId, Date activityEndTime);

    void updateExecuteReportByOp(double actualGearsNum, double actualRoundNum, String councilor, String remark, String resubmisPerson, String id, double reasonNum,String arePersons);

    void updateExecuteReportByPM(double mgGearsNum, double mgRoundNum, double projectProvideNum, double clientProvideNum, String id);

    void updateExecuteReportMgr(Set<String> demandIdSet,boolean isNeedExecute);

    void updateReportCreateTime(String executeDemandId, List<String> cycleList, List<String> weeklyReportDayList);

    void updateDemandDetailStatus();

    void delStoreByExecuteId(String executeId);

    void updateRCSAreaByExecuteId(String executeId);

    void updateAttrStatusByExecuteId(String executeId);

    void updatePM(String originalPMId, String originalPMDeptId, String PMId, String PMDeptId, String projectName, String subjectName);

    void updateEM(Map<String, Object> data);

    List<Map<String, Object>> getCalculateNum(HashMap<String, Set<String>> demandIdMap, String recruitWay);

    void autoCloseDemand();

    void autoCommitReport();

    void autoReviewReport(String type);

    void autoArchiveReport(String type);

    Map<String, String> getUncommittedReportTips();

    Map<String, String> getUnReviewedReportTips(String type);

    Map<String, String> getUnArchivedReportTips(String type);

    List<Map<String, Object>> getNoContractProject(int startDays, int endDays);

    Map<String, String> getDemandInfo(String demandId, String subSchemaCode);

    String getProjectDirector(String userId, String projectDirectorRoleId);

    List<Map<String, Object>> traceRecruitment(int days);

    void updateStoreInfo(String demandId, String subjectName, List<Map<String, Object>> containsStores, String code);

    void createRecruitmentDetail(Map<String, Object> data);

    void updateRecruitmentDetailStatus(List<String> idCodes, String state);

    void updateDetailStoreState(List<String> demandIds, String customerStoreNum, String state);

    void updateDemandForById(String demandId, String recruitWay);

    void updateStoreRCSArea(String subjectName);

    void updateZPDetail(List<String> demandIds, String storeShortName, String rcsArea, String province, String cityName, String district, String detailArea, String area, String storeOutlet,  String customDockingPerson, String customLinkType, String cityLevel,String customerStoreNum);

    void updateDJDetail(List<String> demandIds, String storeShortName, String province, String cityName, String district, String detailArea, String area, String storeOutlet, String customDockingPerson, String customLinkType, String cityLevel,String customerStoreNum);

    void clearFASQ(String id);
}
